﻿/********************************************************************************
** 作者： Mick
** 邮箱： zheng_jinfan@126.com
** 主页： http://www.zhengjinfan.cn
** 创始时间：2016-2-17
** 描述：
**      [辅助类]Cache操作辅助类
*********************************************************************************/
using System;
using System.Collections;
using System.Web;
using System.Web.Caching;
using BestEasyCMS.Framework.Extension;

namespace BestEasyCMS.Framework.Util
{
    /// <summary>
    /// [辅助类]Cache操作辅助类
    /// </summary>
    public sealed class CacheUtil
    {
        #region 构造实例

        /// <summary>
        /// Cache操作辅助类
        /// </summary>
        private CacheUtil()
        {
        }

        /// <summary>
        /// 构建类的实例对象
        /// </summary>
        public static CacheUtil Instance
        {
            get { return new CacheUtil(); }
        }
        #endregion 构造实例

        #region 公共方法

        /// <summary>
        /// 获取指定名称的 Cache 内容
        /// </summary>
        /// <param name="key">Cache 键名</param>
        /// <returns></returns>
        public object GetCache(string key)
        {
            object o = HttpContext.Current.Cache[key];
            return o;
        }

        /// <summary>
        /// 设置指定名称的Cache的内容,有效时间一天
        /// </summary>
        /// <param name="key">Cache中的Key名称</param>
        /// <param name="value">需要保存的内容</param>
        public void SetCache(string key, object value)
        {
            SetCache(key, value, 24);
        }

        /// <summary>
        /// 设置指定名称的Cache的内容
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="saveTime"></param>
        public void SetCache(string key, object value, int saveTime)
        {
            HttpContext.Current.Cache.Add(key
                , value
                , null
                , DateTime.Now.AddHours(saveTime)
                , TimeSpan.Zero
                , CacheItemPriority.High
                , null);
        }

        /// <summary>
        /// 移除缓存
        /// </summary>
        /// <param name="key">Cache中的Key名称</param>
        public void Remove(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                return;
            }
            HttpContext.Current.Cache.Remove(key);
        }

        /// <summary>
        /// 移除缓存
        /// </summary>
        /// <param name="key">Cache中的Key名称包含的字符</param>
        public void RemoveContainStr(string key)
        {
            IDictionaryEnumerator cacheEnum = HttpContext.Current.Cache.GetEnumerator();
            while (cacheEnum.MoveNext())
            {
                if (cacheEnum.Key.ToStr().Contains(key))
                {
                    Instance.Remove(cacheEnum.Key.ToStr());
                }
            }
        }

        #endregion 公共方法
    }
}